// Copyright (c) 2008 Paul Schaeflein
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in 
// the Software without restriction, including without limitation the rights to use, 
// copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the 
// Software, and to permit persons to whom the Software is furnished to do so, subject 
// to the following conditions:

// The above copyright notice and this permission notice shall be included in all 
// copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;

namespace Schaeflein.Community.StsAdmExtensions
{
  public enum STSADMResultCodes
  {
    Success = 0,
    GeneralError = -1,
    SyntaxError = -2
  }

  public abstract class ExtensionCommandBase
  {
    public abstract String Help();
    public abstract STSADMResultCodes Run(StringDictionary keyValues, out string output);

    protected void RaiseStatus(string status)
    {
      ExtensionCommandHandler.ExtensionCommandProgressEventArgs e = new ExtensionCommandHandler.ExtensionCommandProgressEventArgs(status);
      this.OnCommandProgress(e);
    }

    public event ExtensionCommandHandler.ExtensionCommandProgressEventHandler CommandProgress;

    protected virtual void OnCommandProgress(ExtensionCommandHandler.ExtensionCommandProgressEventArgs e)
    {
      if (this.CommandProgress != null)
      {
        this.CommandProgress(this, e);
      }
    }

    public event ExtensionCommandHandler.ExtensionCommandCompleteEventHandler CommandComplete;

    protected virtual void OnCommandComplete(EventArgs e)
    {
      if (this.CommandComplete != null)
      {
        this.CommandComplete(this, e);
      }
    }

  }
}
